#include "head.h"//""：表示从当前工作目录中去寻找该头文件
int makeWorker(int workerNum,workerdata_t *workerArr)
{
    //创建子线程
    for(int i = 0;i < workerNum;i++)
    {
        //在父子进程之间创建一个socket管道，fork之前创建的，因此父子进程共享socket管道
        int pipefd[2];
        socketpair(AF_LOCAL,SOCK_STREAM,0,pipefd);
        pid_t pid = fork();
        //根据进程的返回值去执行不同的代码  成功返回父亲接收子进程pid，子进程接收返回值0，失败返回-1
        if(pid == 0)
        {
            while(1)
            {
                close(pipefd[1]);//子进程关闭写端
                workLoop(pipefd[0]);//一旦父进程像子进程传输内容的时候，则工人便开始工作！！
                //希望子进程永远脱离不了这个if结构
            }
            //希望子进程永远脱离不了这个if结构，即子线程什么都不干
        }
        //父进程关闭读端
        close(pipefd[0]);
        workerArr[i].status = FREE;
        workerArr[i].pid = pid;//父进程调用fork 获取了创建的子进程的pid
        workerArr[i].pipesockfd = pipefd[1];
        printf("i = %d,pid = %d,pipefd = %d\n",i,pid,pipefd[1]);
    }
    return 0;
}
int workLoop(int sockfd)
{
    while(1)
    {
        int netfd;
        // 把父进程监听得到的netfd接收到子进程
        recvfd(sockfd,&netfd);//接收任务，若是工人没有活的话一直卡在这里，主人进程accept，工人开始干活
        printf("begin work!\n");//执行任务
        //sleep(10);
        transFile(netfd);//向客户端发送文件
        close(netfd);
        printf("over work!\n");
        // 当任务完成之后，向主任进程发送自己的pid
        pid_t pid = getpid();
        send(sockfd,&pid,sizeof(pid),0);
    }
}
